﻿using System.Collections.Generic;
using System.Net;
using System.Threading;
using System.Threading.Tasks;

namespace ETModel
{
    /// <summary>
    /// 这个 Actor消息的map服务器的会话管理器 可以理解为 一个geta服务器和一个map服务器的会话通道（保存了map服务器地址和所有对此map服务器的 Actor消息缓存）
    /// </summary>
	public sealed class ActorMessageSender : Entity
	{
        /// <summary>
        /// MAP服务器 端口IP地址
        /// </summary>
        public IPEndPoint Address;
        /// <summary>
        /// ActorId
        /// </summary>
		public long ActorId;

        /// <summary>
        /// 需要对这个map服务器发送的 Actor 消息
        /// </summary>
        public Queue<ActorTask> WaitingTasks = new Queue<ActorTask>();

        /// <summary>
        /// 最近发送消息的时间
        /// </summary>
        public long LastSendTime;

		public TaskCompletionSource<ActorTask> Tcs;

        /// <summary>
        /// 发送失败时间计数
        /// </summary>
		public int FailTimes;
        /// <summary>
        /// 最大发送失败时间
        /// </summary>
		public int MaxFailTimes;

		public int Error;

		public override void Dispose()
		{
			if (this.IsDisposed)
			{
				return;
			}
			
			base.Dispose();

			this.Error = 0;
		}
	}
}